package com.lizonghui.googleplay.base;

import android.view.View;

/**
 * Created by Administrator on 2016/6/19.
 * Holder的基类抽取，
 * 看成data+view，或者看成应用里面的
 * 1提供视图(经过了数据绑定)
 * 2接收数据 refreshHolderView
 * 3数据和视图的绑定，刷新UI setDataAndRefreshHolderView
 *
 */
public abstract class BaseHolder<HOLDERBEANTYPE> {
    //因为要提供视图，所以我们定义一个视图
    public View mHolderView;//提供的视图（经过了数据绑定的视图）----->view

    //因为不知道子类的数据类型，用泛型表示
    private HOLDERBEANTYPE mData; // --------------------------->data


    public BaseHolder(){
        //初始化持有的视图
        mHolderView = initHolderView();

        //convertView找一个类的对象作为holder
        mHolderView.setTag(this);
    }

    /**
     * @des 接收数据，绑定数据，刷新UI
     * @call 外界需要传递数据，让我进行绑定
     * @param data
     */
    public void setDataAndRefreshHolderView(HOLDERBEANTYPE data){
        //保存数据到成员变量
        mData = data;
        refreshHolderView(data);
    }


    /**
     * @des 绑定数据
     * @des 必须实现，但不知道具体实现，定义为抽象，让子类实现
     * @call 外界需要传递数据，让那个我进行数据绑定
     * @param data
     */
    public abstract void refreshHolderView(HOLDERBEANTYPE data);

    /**
     * @des 初始化持有视图，并找到需要的孩子对象,变成成员变量
     * @des 必须实现，但不知道具体实现，定义为抽象，让子类实现
     * @call BaseHolder一旦初始化被调用
     * @return
     */
    public abstract View initHolderView();
}
